import Vue from 'vue'
import App from './App.vue'
import router from './router'
// import './plugins/element.js'
/* 导入全局样式表 */
import './assets/css/global.css'
/* 导入字体图标 */
// import './assets/font-awesome-4.7.0/css/font-awesome.min.css'
/* 导入axios */
import axios from 'axios'
/* 导入第三方插件 table-tree */
import TreeTable from 'vue-table-with-tree-grid'
/* 导入富文本编辑器 */
import VueQuillEditor from 'vue-quill-editor'
/* 富文本编辑器对应的样式 */
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme
/* 导入NProgress，即顶部进度条 */
import NProgress from 'nprogress'
// import 'nprogress/nprogress.css'
/* <link href="https://cdn.bootcss.com/nprogress/0.2.0/nprogress.min.css" rel="stylesheet" /> */
/* 这是省市区数据组件 */
import Distpicker from 'v-distpicker'

/* 引入Echarts 可视化图表组件 */
import Echarts from 'echarts'

/* 富文本编辑器全局注册 */
Vue.use(VueQuillEditor)
/* 为 http 设置请求的根路径， */
axios.defaults.baseURL = 'http://47.115.51.247:8088/' // 所有请求全部经过代理

// request 拦截器
axios.interceptors.request.use(config => {
  // 展示进度条
  NProgress.start()
  // 拦截器：发送请求前，在Headers带上Authorization
  config.headers.Authorization = sessionStorage.getItem('CURRENT_TOKEN')
  // 必需return
  return config
})
// response 拦截器
axios.interceptors.response.use(config => {
  // 隐藏进度条 NProgress.done()
  NProgress.done()
  // 必需return
  return config
})

/* 将 axios 挂载到 Vue 的原型对象上，这样 Vue 的组件就可以通过 this 直接访问到 http 提交请求 */
Vue.prototype.$axios = axios
/* 挂载可视化图表原型 */
Vue.prototype.$echarts = Echarts

Vue.config.productionTip = false

/* 注册组件 */
Vue.component('tree-table', TreeTable)

Vue.component('v-distpicker', Distpicker)
/* 全局注册自定义指令，用于判断当前图片是否能够加载成功，可以加载成功则赋值，否则使用默认图片 */
Vue.directive('real-img', async function (el, binding) {
  const imgURL = binding.value // 获取图片地址
  if (imgURL) {
    const exist = await imageIsExist(imgURL)
    if (exist) {
      el.setAttribute('src', imgURL)
    }
  }
})

const imageIsExist = function (url) {
  return new Promise((resolve) => {
    var img = new Image()
    img.onload = function () {
      if (this.complete === true) {
        resolve(true)
        img = null
      }
    }
    img.onerror = function () {
      resolve(false)
      img = null
    }
    img.src = url
  })
}

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
